home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / add / controlloop.s < prev    next >
Text File  |  1997-01-31  |  47KB  |  2,442 lines

  1. ; Main control loop.
  2. ; This is the very outer loop of the program.
  3.  
  4. ; What needs to be done and when?
  5.  
  6. ; Black screen start.
  7. ; Load title music
  8. ; Load title screen
  9. ; Fade up title screen
  10. ; Select options
  11. ; Play game.
  12.  
  13. ; Playing the game involves allocating screen and
  14. ; level memory, loading the level, loading the
  15. ; samples, loading the wall graphics, playing the
  16. ; level, deallocating the screen memory....
  17.  
  18. ; Control part should therefore:
  19.  
  20. ; 1. Load Title Music
  21. ; 2. Load title screen
  22. ; 3. Fade up title screen.
  23. ; 4. Add 'loading' message
  24. ; 5. Load samples and walls
  25. ; 6: LOOP START
  26. ; 7. Option select screens
  27. ; 8. Free music mem, allocate level mem.
  28. ; 9. Load level
  29. ;10. Play level with options selected
  30. ;11. Reload title music
  31. ;12. Reload title screen
  32. ;13. goto 6
  33.  
  34. INTROTUNEADDR: dc.l 0
  35. INTROTUNENAME: dc.b 'ab3:sounds/abreed3d.med',0
  36.  even
  37. TITLESCRNADDR: dc.l 0
  38. TITLESCRNNAME: dc.b 'AB3D1:includes/titlescrnraw',0
  39.  even
  40. TITLESCRNNAME2: dc.b 'AB3D2:includes/titlescrnraw1',0
  41.  even
  42. OPTSPRADDR: dc.l 0
  43.  
  44.  
  45.  
  46. ProtValA: dc.l 0
  47. ProtValB: dc.l 0
  48. ProtValC: dc.l 0
  49. ProtValD: dc.l 0
  50. ProtValE: dc.l 0
  51. ProtValF: dc.l 0
  52. ProtValG: dc.l 0
  53. ProtValH: dc.l 0
  54. ProtValI: dc.l 0
  55. ProtValJ: dc.l 0
  56. ProtValK: dc.l 0
  57. ProtValL: dc.l 0
  58. ProtValM: dc.l 0
  59. ProtValN: dc.l 0
  60.  
  61.  
  62. KVALTOASC:
  63.         Dc.b    " `  "," 1  "," 2  "," 3  "
  64.         dc.b    " 4  "," 5  "," 6  "," 7  "
  65.         dc.b    " 8  "," 9  "
  66.         Dc.b    " 0  "," -  "," +  "," \  "
  67.         dc.b     '    ','    '," Q  "," W  "
  68.         dc.b    " E  "," R  "
  69.         Dc.b    " T  "," Y  "," U  "," I  "
  70.         dc.b    " O  "," P  "," [  "," ]  "
  71.         dc.b    '    ','KP1 '
  72.         Dc.b    'KP2 ','KP3 '," A  "," S  "
  73.         dc.b    " D  "," F  "," G  "," H  "
  74.         dc.b    " J  "," K  "
  75.         Dc.b    " L  "," ;  "," #  ",'    '
  76.         dc.b    '    ','KP4 ','KP5 ','KP6 '
  77.         dc.b    '    '," Z  "
  78.         Dc.b    " X  "," C  "," V  "," B  "
  79.         dc.b    " N  "," M  "," ,  "," .  "
  80.         dc.b     " /  ",'    '
  81.         Dc.b    '    ','KP7 ','KP8 ','KP9 '
  82.         dc.b    'SPC ','<-- ','TAB ','ENT '
  83.         dc.b    'RTN ','ESC '
  84.         Dc.b    'DEL ','    ','    ','    '
  85.         dc.b    'KP- ','    ','UCK ','DCK '
  86.         dc.b    'RCK ','LCK '
  87.         Dc.b    'FK1 ','FK2 ','FK3 ','FK4 '
  88.         dc.b    'FK5 ','FK6 ','FK7 ','FK8 '
  89.         dc.b    'FK9 ','FK0 '
  90.         Dc.b    'KP( ','KP) ','KP/ ','KP* '
  91.         dc.b    'KP+ '
  92.         dc.b    'HLP ','LSH ','RSH '
  93.         dc.b    'CPL ','CTL '
  94.         Dc.b    'LAL ','RAL ','LAM ','RAM '
  95.         dc.b    '    ','    ','    ','    '
  96.         dc.b    '    ','    '
  97.         Dc.b    '    ','    ','    ','    '
  98.         dc.b    '    ','    ','    ','    '
  99.         dc.b    '    ','    '
  100.  
  101.  even
  102.  
  103. FINISHEDLEVEL: dc.w 0
  104.  
  105.  
  106. START:
  107.  
  108.  move.b #'n',mors
  109.  
  110.   
  111.  
  112. ************************************88
  113. * TAKE OUT WHEN PLAYING MODULE AGAIN
  114. ********************************
  115. ProtChkBLev1:
  116.     PRSDF
  117.     PRSDE
  118. ************************************
  119.  
  120. ; move.l #PROTCALLENC,a0
  121. ; move.l #(ENDPROT-PROTCALLENC)/4-1,d1
  122. ; move.l #$75055345,d0
  123. ;codeitup:
  124. ; sub.l d0,(a0)+
  125. ; ror.l #1,d0
  126. ; dbra d1,codeitup
  127. ; rts
  128.  
  129. ProtChkCLev1:
  130.  PRSDA
  131.  
  132.  move.w #$7201,titleplanes
  133.  
  134.  move.l 4.w,a6
  135.  move.l #doslibname,a1
  136.  moveq #0,d0
  137.  jsr -552(a6)
  138.  move.l d0,doslib
  139.  PRSDS
  140.  jsr stuff
  141.  
  142.  jsr _InitLowLevel
  143.  
  144.  
  145.  jsr CLEARTITLEPAL
  146.  
  147. ProtChkDLev1:
  148.  PRSDT
  149.  
  150.  move.w #$20,$dff1dc
  151.  move.l #titlecop,$dff080
  152.  PRSDV
  153.  move.w #$87c0,$dff000+dmacon
  154.  move.w #$8020,$dff000+dmacon
  155. ProtChkMLev1:
  156.  move.w $dff006,d0
  157.  lea RVAL2-100(pc),a0
  158.  add.w d0,100(a0)
  159.  
  160.  bsr GETTITLEMEM
  161. ProtChkELev1:
  162.  PRSDU
  163.  bsr CLROPTSCRN
  164.  
  165.  bsr SETUPTITLESCRN
  166.  
  167. ; jsr _InitPlayer
  168.  
  169. ; move.l #INTROTUNENAME,a0
  170. ; jsr _LoadModule
  171. ; move.l d0,INTROTUNEADDR
  172.  PRSDY
  173. ; move.l d0,a0
  174. ; jsr _InitModule
  175.  
  176. ; move.l INTROTUNEADDR,a0
  177. ; jsr _PlayModule
  178. ProtChkFLev1:
  179.  PRSDa
  180.  bsr LOADTITLESCRN
  181.  
  182.  FLASHER $0f0,$fff
  183.  
  184.  move.w #0,FADEVAL
  185.  move.w #63,FADEAMOUNT
  186.  bsr FADEUPTITLE
  187.  PRSDB
  188.  jsr LOADWALLS
  189.  jsr LOADFLOOR
  190.  jsr LOADOBS
  191.  PRSDZ
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  move.w #31,FADEAMOUNT
  198.  PRSDC
  199.  bsr FADEDOWNTITLE 
  200.  
  201.  IFEQ CD32VER 
  202.  bsr ASKFORDISK
  203.  ENDC
  204.  IFNE CD32VER
  205.  PRSDD
  206.  ENDC
  207.  
  208.  jsr LOAD_SFX
  209. ; jsr _StopPlayer
  210.  PRSDW
  211.  PRSDX
  212. ; jsr _RemPlayer
  213.  
  214.  
  215.  IFNE CD32VER
  216.  move.l doslib,a6
  217.  move.l #115,d1
  218.  jsr -198(a6)
  219.  ENDC
  220.  
  221. ; move.l #newblag,$80
  222. ; trap #0
  223. ; bra JUMPPASTIT
  224. ; rts
  225. ;
  226. ;newblag:
  227.  
  228.  
  229. ProtChkGLev1:
  230. ; bsr PROTSETUP
  231.  bsr DEFAULTGAME
  232.  
  233. ; move.l INTROTUNEADDR,a0
  234. ; jsr _UnLoadModule
  235.  
  236. ; IFEQ CD32VER
  237. ; jsr KInt_Init
  238. ; ENDC
  239. ProtChkHLev1:
  240. ; rte
  241. ;
  242. ;JUMPPASTIT:
  243.  
  244. BACKTOMENU:
  245.  
  246.  jsr CLEARKEYBOARD
  247.  
  248.  cmp.b #'s',mors
  249.  beq.s BACKTOSLAVE
  250.  cmp.b #'m',mors
  251.  beq.s BACKTOMASTER
  252.  bsr READMAINMENU
  253.  bra DONEMENU
  254. BACKTOMASTER:
  255.  bsr MASTERMENU
  256.  bra DONEMENU
  257. BACKTOSLAVE:
  258.  bsr SLAVEMENU
  259. DONEMENU:
  260.  
  261.  
  262.  bsr WAITREL
  263.  
  264. ; IFEQ CD32VER
  265. ; move.l OLDKINT,$68.w
  266. ; ENDC
  267.  
  268.  bsr CLRSPRITES
  269.  
  270.  move.w #31,FADEAMOUNT
  271.  bsr FADEUPTITLE
  272.  move.w #63,FADEAMOUNT
  273.  bsr FADEDOWNTITLE
  274.  
  275.  move.w #$0201,titleplanes
  276.  
  277.     FILTER
  278.  
  279.  bsr RELEASETITLEMEM
  280.  
  281.   
  282.  jsr LOADBOTPIC
  283.  
  284.   
  285.  clr.b FINISHEDLEVEL
  286.  
  287.  move.w #0,PLR1s_angpos
  288.  move.w #0,PLR2s_angpos
  289.  move.w #0,PLR1_angpos
  290.  move.w #0,PLR2_angpos
  291.  move.b #0,PLR1_GunSelected
  292.  move.b #0,PLR2_GunSelected
  293.  
  294. **************************8
  295.  clr.b NASTY
  296. *************************** 
  297.  
  298.  
  299.     jsr PLAYTHEGAME
  300.  
  301.  bsr FREEBOTMEM 
  302.  
  303. ; bra QUITTT
  304.  
  305.  tst.b FINISHEDLEVEL
  306.  beq dontusestats
  307.  bsr CALCPASSWORD
  308. dontusestats:
  309.  bsr PASSLINETOGAME
  310.  bsr GETSTATS
  311.  
  312.  bsr GETTITLEMEM
  313.  bsr CLROPTSCRN
  314.  bsr SETUPTITLESCRN
  315.  
  316.  bsr LOADTITLESCRN2
  317.  move.w #$7201,titleplanes
  318.  
  319.  move.w #$20,$dff1dc
  320.  move.l #titlecop,$dff080
  321.  move.w #$87c0,$dff000+dmacon
  322.  move.w #$8020,$dff000+dmacon 
  323.  
  324.  move.w #0,FADEVAL
  325.  move.w #63,FADEAMOUNT
  326.  bsr FADEUPTITLE
  327.  
  328.  move.w #31,FADEAMOUNT
  329.  bsr FADEDOWNTITLE 
  330.  
  331. ; IFEQ CD32VER
  332. ; jsr KInt_Init
  333. ; ENDC
  334.  
  335.  bra BACKTOMENU
  336.  
  337. QUITTT:
  338.  
  339.  move.l LEVELDATA,d1
  340.  move.l d1,a1
  341.  move.l #120000,d0
  342.  move.l 4.w,a6
  343.  jsr -210(a6)
  344.  
  345.  move.l TEXTSCRN,d1
  346.  move.l d1,a1
  347.  move.l #10240*2,d0
  348.  move.l 4.w,a6
  349.  jsr -210(a6)
  350.  
  351.  jsr RELEASEWALLMEM
  352.  jsr RELEASESAMPMEM
  353.  jsr RELEASEFLOORMEM
  354.  jsr RELEASEOBJMEM
  355.   
  356.  rte
  357.  
  358. SSTACK: dc.l 0
  359.  
  360. ; KEY OPTIONS:
  361. CONTROLBUFFER:
  362. turn_left_key:
  363.  dc.b $4f
  364. turn_right_key:
  365.  dc.b $4e
  366. forward_key:
  367.  dc.b $4c
  368. backward_key:
  369.  dc.b $4d
  370. fire_key:
  371.  dc.b $65
  372. operate_key:
  373.  dc.b $40
  374. run_key:
  375.  dc.b $61
  376. force_sidestep_key:
  377.  dc.b $67
  378. sidestep_left_key:
  379.  dc.b $39
  380. sidestep_right_key:
  381.  dc.b $3a
  382. duck_key:
  383.  dc.b $22
  384. look_behind_key:
  385.  dc.b $28
  386.  
  387. templeftkey: dc.b 0
  388. temprightkey: dc.b 0
  389. tempslkey: dc.b 0 
  390. tempsrkey: dc.b 0
  391.  
  392.  even 
  393.  
  394. GETSTATS:
  395. ; CHANGE PASSWORD INTO RAW DATA
  396.  
  397.  move.b PASSBUFFER,d0
  398.  and.w #$7f,d0
  399.  move.w d0,PLR1_energy
  400.  move.b PASSBUFFER+1,d0
  401.  btst #7,d0
  402.  sne PLR1_GunData+32+7
  403.  btst #6,d0
  404.  sne PLR1_GunData+32*2+7
  405.  btst #5,d0
  406.  sne PLR1_GunData+32*4+7
  407.  btst #4,d0
  408.  sne PLR1_GunData+32*7+7
  409.  and.w #%1111,d0
  410.  move.w d0,MAXLEVEL
  411.  move.b PASSBUFFER+2,d0
  412.  and.w #$7f,d0
  413.  lsl.w #3,d0
  414.  move.w d0,PLR1_GunData
  415.  move.b PASSBUFFER+3,d0
  416.  and.w #$7f,d0
  417.  lsl.w #3,d0
  418.  move.w d0,PLR1_GunData+32
  419.  move.b PASSBUFFER+4,d0
  420.  and.w #$7f,d0
  421.  lsl.w #3,d0
  422.  move.w d0,PLR1_GunData+32*2
  423.  move.b PASSBUFFER+5,d0
  424.  and.w #$7f,d0
  425.  lsl.w #3,d0
  426.  move.w d0,PLR1_GunData+32*4
  427.  move.b PASSBUFFER+6,d0
  428.  and.w #$7f,d0
  429.  lsl.w #3,d0
  430.  move.w d0,PLR1_GunData+32*7
  431.  rts
  432.  
  433.  
  434. SETPLAYERS:
  435.  
  436.  move.w PLOPT,d0
  437.  add.b #'a',d0
  438.  move.b d0,LEVA
  439.  move.b d0,LEVB
  440.  move.b d0,LEVC
  441.  
  442.  cmp.b #'s',mors
  443.  beq SLAVESETUP
  444.  cmp.b #'m',mors
  445.  beq MASTERSETUP
  446.  st NASTY
  447. onepla:
  448.  rts
  449.  
  450. NASTY: dc.w 0
  451.  
  452. MASTERSETUP:
  453.  bsr TWOPLAYER
  454.  clr.b NASTY
  455.  move.w PLOPT,d0
  456.  jsr SENDFIRST
  457.  rts
  458.  
  459. SLAVESETUP:
  460.  bsr TWOPLAYER
  461.  CLR.B NASTY
  462.  jsr RECFIRST
  463.  move.w d0,PLOPT
  464.  add.b #'a',d0
  465.  move.b d0,LEVA
  466.  move.b d0,LEVB
  467.  move.b d0,LEVC
  468.  rts
  469.      
  470. ********************************************************
  471.  
  472. ASKFORDISK:
  473.  lea RVAL1+300(pc),a0
  474.  lea RVAL2+900(pc),a1
  475.  PRSDD
  476.  move.w #3,OptScrn
  477.  bsr DRAWOPTSCRN
  478.  
  479. ProtChkNLev1:
  480. .wtrel:
  481.  btst #7,$bfe001
  482.  beq.s .wtrel
  483.  
  484. wtclick:
  485.  add.w #$235,-300(a0)
  486.  add.w #$4533,-900(a0)
  487.  btst #6,$bfe001
  488.  bne.s wtclick
  489.  
  490.  rts
  491.  
  492. CLRSPRITES: 
  493.  move.l #nullspr,d0
  494.  move.w d0,tsp0l
  495.  move.w d0,tsp1l
  496.  move.w d0,tsp2l
  497.  move.w d0,tsp3l
  498.  move.w d0,tsp4l
  499.  move.w d0,tsp5l
  500.  move.w d0,tsp6l
  501.  move.w d0,tsp7l
  502.  swap d0
  503.  move.w d0,tsp0h
  504.  move.w d0,tsp1h
  505.  move.w d0,tsp2h
  506.  move.w d0,tsp3h
  507.  move.w d0,tsp4h
  508.  move.w d0,tsp5h
  509.  move.w d0,tsp6h
  510.  move.w d0,tsp7h 
  511.  rts
  512.  
  513. ********************************************************
  514.  
  515. READMAINMENU:
  516.  
  517.  
  518.  move.b #'n',mors
  519.  
  520.  move.w MAXLEVEL,d0
  521.  
  522.  move.l #CURRENTLEVELLINE,a1
  523.  muls #40,d0
  524.  move.l #LEVEL_OPTS,a0
  525.  add.l d0,a0
  526.  bsr PUTINLINE
  527.  
  528.  
  529.  
  530. ; Stay here until 'play game' is selected.
  531.  
  532.  move.w #0,OptScrn
  533.  bsr DRAWOPTSCRN
  534.  move.w #1,OPTNUM
  535.  
  536.  bsr HIGHLIGHT
  537.  
  538.  
  539.  
  540.  bsr WAITREL
  541. .rdlop:
  542.  
  543.  bsr CHECKMENU
  544.  tst.w d0
  545.  blt.s .rdlop
  546.  
  547.  bne .noopt
  548.  
  549.  bra MASTERMENU
  550.  
  551. .noopt:
  552.  
  553.  cmp.w #1,d0
  554.  beq playgame
  555.  
  556.  cmp.w #2,d0
  557.  bne .nocontrol
  558.  
  559.  bsr CHANGECONTROLS
  560.  
  561.  move.w #0,OptScrn
  562.  bsr DRAWOPTSCRN
  563.  move.w #0,OPTNUM
  564.  
  565.  bsr HIGHLIGHT
  566.  
  567.  bsr WAITREL
  568.  bra .rdlop
  569.  
  570. .nocontrol:
  571.  
  572.  cmp.w #3,d0
  573.  bne .nocred
  574.  bsr SHOWCREDITS
  575.  move.w #0,OptScrn
  576.  bsr DRAWOPTSCRN
  577.  move.w #1,OPTNUM
  578.  
  579.  bsr HIGHLIGHT
  580.  
  581.  bsr WAITREL
  582.  bra .rdlop
  583.  
  584.  
  585. .nocred:
  586.  
  587.  cmp.w #4,d0
  588.  bne playgame
  589.  bsr WAITREL
  590.  
  591.  move.l #PASSWORDLINE+12,a0
  592.  moveq #15,d2
  593. .clrline:
  594.  move.b #32,(a0)+
  595.  dbra d2,.clrline 
  596.  move.w #0,OptScrn
  597.  bsr DRAWOPTSCRN
  598.  
  599.  IFEQ CD32VER
  600.  clr.b lastpressed
  601.  move.l #PASSWORDLINE+12,a0
  602.  move.w #0,d1
  603. .ENTERPASS:
  604.  tst.b lastpressed
  605.  beq .ENTERPASS
  606.  move.b lastpressed,d2
  607.  move.b #0,lastpressed
  608.  move.l #KVALTOASC,a1
  609.  
  610.  cmp.l #'<-- ',(a1,d2.w*4)
  611.  bne .nodel
  612.  
  613.  tst.b d1
  614.  beq .nodel
  615.  
  616.  subq #1,d1
  617.  move.b #32,-(a0)
  618.  movem.l d0-d7/a0-a6,-(a7)
  619.  bsr JUSTDRAWIT
  620.  movem.l (a7)+,d0-d7/a0-a6
  621.  bra .ENTERPASS
  622.  
  623. .nodel:
  624.  
  625.  cmp.l #'RTN ',(a1,d2.w*4)
  626.  beq .FORGETIT
  627.  cmp.l #'ESC ',(a1,d2.w*4)
  628.  beq .FORGETIT
  629.  move.b 1(a1,d2.w*4),d2
  630.  cmp.b #65,d2
  631.  blt .ENTERPASS
  632.  cmp.b #'Z',d2
  633.  bgt .ENTERPASS
  634.  move.b d2,(a0)+
  635.  move.w #0,OptScrn
  636.  movem.l d0-d7/a0-a6,-(a7)
  637.  bsr JUSTDRAWIT
  638.  movem.l (a7)+,d0-d7/a0-a6
  639.  add.w #1,d1
  640.  cmp.w #16,d1
  641.  blt .ENTERPASS
  642.  
  643.  ENDC
  644.  IFNE CD32VER
  645.  move.l #PASSWORDLINE+12,a0
  646.  move.w #15,d0
  647. .ENTERPASS:
  648.  bsr GETACHAR
  649.  dbra d0,.ENTERPASS
  650.  ENDC
  651.  
  652.  bsr PASSLINETOGAME
  653.  tst.w d0
  654.  bne .FORGETIT
  655.  
  656.  bsr GETSTATS
  657.  move.w MAXLEVEL,d0
  658.  move.l #CURRENTLEVELLINE,a1
  659.  muls #40,d0
  660.  move.l #LEVEL_OPTS,a0
  661.  add.l d0,a0
  662.  bsr PUTINLINE
  663.  
  664. .FORGETIT:
  665.  bsr WAITREL
  666.  bsr CALCPASSWORD
  667.  
  668.  move.w #0,OptScrn
  669.  bsr DRAWOPTSCRN
  670.  
  671.  move.w #1,OPTNUM
  672.  
  673.  bsr HIGHLIGHT
  674.  
  675.  bra .rdlop 
  676.  
  677. playgame:
  678.  move.w MAXLEVEL,PLOPT
  679.  rts
  680.  
  681. LEVELSELECTED:
  682.  dc.w 0
  683.  
  684.  IFNE CD32VER
  685. GETACHAR:
  686.  moveq #0,d7
  687.  move.b #'A',(a0)
  688.  movem.l d0-d7/a0-a6,-(a7)
  689.  jsr JUSTDRAWIT
  690.  movem.l (a7)+,d0-d7/a0-a6
  691.  
  692. .wtnum:
  693.  btst #1,$dff00c
  694.  sne d1
  695.  btst #1,$dff00d
  696.  sne d2
  697.  btst #0,$dff00c
  698.  sne d3
  699.  btst #0,$dff00d
  700.  sne d4
  701.  
  702.  eor.b d1,d3
  703.  eor.b d2,d4
  704.  
  705.  tst.b d1
  706.  beq.s .NODELETE
  707.  cmp.w #15,d0
  708.  beq.s .NODELETE
  709.  move.b #32,(a0)
  710.  subq #1,a0
  711.  addq #1,d0
  712.  move.b (a0),d7
  713.  sub.b #'A',d7
  714.  movem.l d0-d7/a0-a6,-(a7)
  715.  jsr JUSTDRAWIT
  716.  movem.l (a7)+,d0-d7/a0-a6
  717.  jsr WAITFORNOPRESS
  718.  bra .wtnum
  719. .NODELETE
  720.  
  721.  tst.b d4
  722.  bne.s .PREVNUM
  723.  tst.b d3
  724.  bne.s .NEXTNUM
  725.  btst #7,$bfe001
  726.  bne.s .wtnum
  727.  addq #1,a0
  728.  jsr WAITFORNOPRESS
  729.  rts
  730.  
  731. .PREVNUM:
  732.  subq #1,d7
  733.  bge.s .nonegg
  734.  moveq #15,d7
  735. .nonegg:
  736.  move.b d7,d1
  737.  add.b #'A',d1
  738.  move.b d1,(a0)
  739.  movem.l d0-d7/a0-a6,-(a7)
  740.  jsr JUSTDRAWIT
  741.  movem.l (a7)+,d0-d7/a0-a6
  742.  
  743.  jsr WAITFORNOPRESS
  744.  
  745.  bra .wtnum
  746.  
  747. .NEXTNUM:
  748.  addq #1,d7
  749.  cmp.w #15,d7
  750.  ble.s .nobigg
  751.  moveq #0,d7
  752. .nobigg:
  753.  move.b d7,d1
  754.  add.b #'A',d1
  755.  move.b d1,(a0)
  756.  movem.l d0-d7/a0-a6,-(a7)
  757.  jsr JUSTDRAWIT
  758.  movem.l (a7)+,d0-d7/a0-a6
  759.  jsr WAITFORNOPRESS
  760.  bra .wtnum
  761.  rts
  762.  ENDC
  763.  
  764.  
  765. MASTERMENU:
  766.  
  767.  move.b #'m',mors
  768.  
  769.  move.w #0,LEVELSELECTED
  770.  
  771.  move.w #0,d0 
  772.  move.l #CURRENTLEVELLINEM,a1
  773.  muls #40,d0
  774.  move.l #LEVEL_OPTS,a0
  775.  add.l d0,a0
  776.  bsr PUTINLINE
  777.  
  778. ; Stay here until 'play game' is selected.
  779.  
  780.  move.w #4,OptScrn
  781.  bsr DRAWOPTSCRN
  782.  move.w #1,OPTNUM
  783.  
  784.  bsr HIGHLIGHT
  785.  
  786.  bsr WAITREL
  787. .rdlop:
  788.  bsr CHECKMENU
  789.  tst.w d0
  790.  blt.s .rdlop
  791.  bsr WAITREL
  792.  
  793.  cmp.w #1,d0
  794.  bne.s .nonextlev
  795.  
  796.  move.w LEVELSELECTED,d0
  797.  add.w #1,d0
  798.  cmp.w MAXLEVEL,d0
  799.  blt .nowrap
  800.  moveq #0,d0
  801. .nowrap:
  802.  move.w d0,LEVELSELECTED
  803.  move.l #CURRENTLEVELLINEM,a1
  804.  muls #40,d0
  805.  move.l #LEVEL_OPTS,a0
  806.  add.l d0,a0
  807.  bsr PUTINLINE
  808.  bsr JUSTDRAWIT
  809.  bra .rdlop
  810.  
  811. .nonextlev:
  812.  cmp.w #2,d0
  813.  beq .playgame
  814.  
  815.  cmp.w #0,d0
  816.  bne .noopt
  817.  
  818.  bra SLAVEMENU
  819.  
  820. .noopt:
  821.  
  822.  cmp.w #3,d0
  823.  bne .nocontrol
  824.  
  825.  bsr CHANGECONTROLS
  826.  
  827.  move.w #4,OptScrn
  828.  bsr DRAWOPTSCRN
  829.  move.w #0,OPTNUM
  830.  
  831.  bsr HIGHLIGHT
  832.  
  833.  bsr WAITREL
  834.  bra .rdlop
  835.  
  836. .nocontrol:
  837.  
  838. .playgame
  839.  
  840.  move.w LEVELSELECTED,PLOPT
  841.  rts
  842.  
  843. SLAVEMENU:
  844.  
  845.  move.b #'s',mors
  846.  
  847. ; Stay here until 'play game' is selected.
  848.  
  849.  move.w #5,OptScrn
  850.  bsr DRAWOPTSCRN
  851.  move.w #1,OPTNUM
  852.  
  853.  bsr HIGHLIGHT
  854.  
  855.  bsr WAITREL
  856. .rdlop:
  857.  bsr CHECKMENU
  858.  tst.w d0
  859.  blt.s .rdlop
  860.  bsr WAITREL
  861.  
  862.  cmp.w #1,d0
  863.  beq .playgame
  864.  
  865.  cmp.w #0,d0
  866.  bne .noopt
  867.  
  868.  bra READMAINMENU
  869.  
  870. .noopt:
  871.  
  872.  cmp.w #2,d0
  873.  bne .nocontrol
  874.  
  875.  bsr CHANGECONTROLS
  876.  
  877.  move.w #0,OptScrn
  878.  bsr DRAWOPTSCRN
  879.  move.w #0,OPTNUM
  880.  
  881.  bsr HIGHLIGHT
  882.  
  883.  bsr WAITREL
  884.  bra .rdlop
  885.  
  886. .nocontrol:
  887. .playgame:
  888.  
  889.  rts
  890.  
  891. TWOPLAYER:
  892.  move.w #0,OldEnergy
  893.  move.w #127,Energy
  894.  jsr EnergyBar
  895.  
  896.  move.w #63,OldAmmo
  897.  move.w #0,Ammo
  898.  jsr AmmoBar
  899.  move.w #0,OldAmmo
  900.  
  901.  move.w #127,PLR1_energy
  902.  move.w #127,PLR2_energy 
  903.  move.w #160,PLR1_GunData    ; 10 shots pistol
  904.  st PLR1_GunData+7
  905.  
  906.  st.b PLR1_GunData+32+7
  907.  move.w #80*4,PLR1_GunData+32
  908.  
  909.  st.b PLR1_GunData+64+7
  910.  move.w #80*4,PLR1_GunData+64
  911.  
  912.  st.b PLR1_GunData+32*3+7
  913.  move.w #80*4,PLR1_GunData+32*3
  914.  
  915.  st.b PLR1_GunData+32*4+7
  916.  move.w #80*4,PLR1_GunData+32*4
  917.  
  918.  st.b PLR1_GunData+32*7+7
  919.  move.w #80*4,PLR1_GunData+32*7
  920.  
  921.  move.b #0,PLR1_GunSelected
  922.  
  923.  move.w #160,PLR2_GunData    ; 10 shots pistol
  924.  st PLR2_GunData+7
  925.  st.b PLR2_GunData+32+7
  926.  move.w #80*4,PLR2_GunData+32
  927.  
  928.  st.b PLR2_GunData+64+7
  929.  move.w #80*4,PLR2_GunData+64
  930.  
  931.  st.b PLR2_GunData+32*3+7
  932.  move.w #80*4,PLR2_GunData+32*3
  933.  
  934.  st.b PLR2_GunData+32*4+7
  935.  move.w #80*4,PLR2_GunData+32*4
  936.  
  937.  st.b PLR2_GunData+32*7+7
  938.  move.w #80*4,PLR2_GunData+32*7
  939.  move.b #0,PLR2_GunSelected
  940.  rts
  941.  
  942. newdum:
  943.  rts
  944.  
  945. DEFAULTGAME:
  946.  move.w #0,MAXLEVEL
  947.  move.w #5,CHEATNUM
  948.  move.l #CHEATFRAME-200000,CHEATPTR
  949.  
  950.  move.w #0,OldEnergy
  951.  move.w #127,Energy
  952.  jsr EnergyBar
  953.  
  954.  move.w #63,OldAmmo
  955.  move.w #0,Ammo
  956.  jsr AmmoBar
  957.  move.w #0,OldAmmo
  958.  
  959.  move.w #127,PLR1_energy
  960.  move.w #127,PLR2_energy 
  961.  move.w #160,PLR1_GunData    ; 10 shots pistol
  962.  st PLR1_GunData+7
  963.  clr.b PLR1_GunData+32+7
  964.  clr.w PLR1_GunData+32
  965.  clr.b PLR1_GunData+64+7
  966.  clr.w PLR1_GunData+64
  967.  clr.b PLR1_GunData+32*3+7
  968.  clr.w PLR1_GunData+32*3
  969.  clr.b PLR1_GunData+32*4+7
  970.  clr.w PLR1_GunData+32*4
  971.  clr.b PLR1_GunData+32*7+7
  972.  clr.w PLR1_GunData+32*7
  973.  move.b #0,PLR1_GunSelected
  974.  
  975. ProtChkILev1:
  976.  move.l #RealTable-2000,a3
  977.  move.l #PROTCALC-5000,a1
  978.  move.l #ASKFORPROT-10000,a2
  979.  move.l #PROTCALLENC-800,a4
  980.  adda.w #800,a4
  981.  jsr (a4)
  982.  
  983. ************************************************
  984. * TEMPORARY MEASURE: REMOVE BEFORE RELEASE *****
  985. ************************************************
  986.  
  987. ProtChkLLev1:
  988.  tst.w protA
  989.  bne.s .noreset
  990.  move.l #0,a7
  991. .noreset:
  992.  
  993. ************************************************
  994.  
  995.  move.w #160,PLR2_GunData    ; 10 shots pistol
  996.  st PLR2_GunData+7
  997.  clr.b PLR2_GunData+32+7
  998.  clr.w PLR2_GunData+32
  999.  clr.b PLR2_GunData+64+7
  1000.  clr.w PLR2_GunData+64
  1001.  clr.b PLR2_GunData+32*3+7
  1002.  clr.w PLR2_GunData+32*3
  1003.  clr.b PLR2_GunData+32*4+7
  1004.  clr.w PLR2_GunData+32*4
  1005.  clr.b PLR2_GunData+32*7+7
  1006.  clr.w PLR2_GunData+32*7
  1007.  move.b #0,PLR2_GunSelected
  1008.  
  1009.  bsr CALCPASSWORD
  1010.  
  1011.  rts
  1012.  
  1013. CHKPROT: dc.w 0
  1014.  
  1015. GETPARITY:
  1016.  move.w #6,d3
  1017. .calcparity:
  1018.  btst d3,d0
  1019.  beq.s .nochange
  1020.  bchg #7,d0
  1021. .nochange:
  1022.  dbra d3,.calcparity
  1023.  rts
  1024.  
  1025. CHECKPARITY:
  1026.  move.w #6,d3
  1027.  move.b #$0,d2
  1028. .calcparity:
  1029.  btst d3,d0
  1030.  beq.s .nochange
  1031.  bchg #7,d2
  1032. .nochange:
  1033.  dbra d3,.calcparity
  1034.  move.b d0,d1
  1035.  and.b #$80,d1
  1036.  eor.b d1,d2
  1037.  sne.s d5
  1038.  rts
  1039.  
  1040. CALCPASSWORD:
  1041.  move.b PLR1_energy+1,d0
  1042.  bsr GETPARITY
  1043.  move.b d0,PASSBUFFER
  1044.  moveq #0,d0
  1045.  tst.b PLR1_GunData+32+7
  1046.  sne d0
  1047.  lsl.w #1,d0
  1048.  tst.b PLR1_GunData+64+7
  1049.  sne d0
  1050.  lsl.w #1,d0
  1051.  tst.b PLR1_GunData+32*4+7
  1052.  sne d0
  1053.  lsl.w #1,d0
  1054.  tst.b PLR1_GunData+32*7+7
  1055.  sne d0
  1056.  lsr.w #3,d0
  1057.  and.b #%11110000,d0
  1058.  or.b MAXLEVEL+1,d0
  1059.  move.b d0,PASSBUFFER+1
  1060.  eor.b #%10110101,d0
  1061.  neg.b d0
  1062.  add.b #50,d0
  1063.  move.b d0,PASSBUFFER+7
  1064.  
  1065.  move.w PLR1_GunData,d0
  1066.  lsr.w #3,d0
  1067.  bsr GETPARITY
  1068.  move.b d0,PASSBUFFER+2
  1069.  move.w PLR1_GunData+32,d0
  1070.  lsr.w #3,d0
  1071.  bsr GETPARITY
  1072.  move.b d0,PASSBUFFER+3
  1073.  move.w PLR1_GunData+32*2,d0
  1074.  lsr.w #3,d0
  1075.  bsr GETPARITY
  1076.  move.b d0,PASSBUFFER+4
  1077.  move.w PLR1_GunData+32*4,d0
  1078.  lsr.w #3,d0
  1079.  bsr GETPARITY
  1080.  move.b d0,PASSBUFFER+5
  1081.  move.w PLR1_GunData+32*7,d0
  1082.  lsr.w #3,d0
  1083.  bsr GETPARITY
  1084.  move.b d0,PASSBUFFER+6
  1085.  
  1086.  move.w #3,d0
  1087.  move.l #PASSBUFFER,a0
  1088.  move.l #PASSBUFFER+8,a1
  1089.  move.l #PASS,a2
  1090.  moveq #0,d4
  1091. mixemup:
  1092.  move.b (a0)+,d1
  1093.  move.b -(a1),d2
  1094.  not.b d2
  1095.  moveq #0,d3
  1096.  lsr.b #1,d1
  1097.  addx.w d3,d3
  1098.  lsr.b #1,d2
  1099.  addx.w d3,d3
  1100.  lsr.b #1,d1
  1101.  addx.w d3,d3
  1102.  lsr.b #1,d2
  1103.  addx.w d3,d3
  1104.  lsr.b #1,d1
  1105.  addx.w d3,d3
  1106.  lsr.b #1,d2
  1107.  addx.w d3,d3
  1108.  lsr.b #1,d1
  1109.  addx.w d3,d3
  1110.  lsr.b #1,d2
  1111.  addx.w d3,d3
  1112.  lsr.b #1,d1
  1113.  addx.w d3,d3
  1114.  lsr.b #1,d2
  1115.  addx.w d3,d3
  1116.  lsr.b #1,d1
  1117.  addx.w d3,d3
  1118.  lsr.b #1,d2
  1119.  addx.w d3,d3
  1120.  lsr.b #1,d1
  1121.  addx.w d3,d3
  1122.  lsr.b #1,d2
  1123.  addx.w d3,d3
  1124.  lsr.b #1,d1
  1125.  addx.w d3,d3
  1126.  lsr.b #1,d2
  1127.  addx.w d3,d3
  1128.  move.w d3,(a2)+
  1129.  
  1130.  dbra d0,mixemup
  1131.  
  1132.  move.l #PASSWORDLINE+12,a0
  1133.  move.l #PASS,a1
  1134.  move.w #7,d0
  1135. putinpassline:
  1136.  move.b (a1),d1
  1137.  and.b #%1111,d1
  1138.  add.b #65,d1
  1139.  move.b d1,(a0)+
  1140.  move.b (a1)+,d1
  1141.  lsr.b #4,d1
  1142.  and.b #%1111,d1
  1143.  add.b #65,d1
  1144.  move.b d1,(a0)+
  1145.  dbra d0,putinpassline
  1146.  rts
  1147.  
  1148. PASSLINETOGAME:
  1149.  move.l #PASSWORDLINE+12,a0
  1150.  move.l #PASS,a1
  1151.  move.w #7,d0
  1152. getbuff:
  1153.  move.b (a0)+,d1
  1154.  move.b (a0)+,d2
  1155.  sub.b #65,d1
  1156.  sub.b #65,d2
  1157.  and.b #%1111,d1
  1158.  and.b #%1111,d2
  1159.  lsl.b #4,d2
  1160.  or.b d2,d1
  1161.  move.b d1,(a1)+
  1162.  dbra d0,getbuff
  1163.  
  1164.  move.l #PASS,a0
  1165.  move.l #PASSBUFFER,a1
  1166.  move.l #PASSBUFFER+8,a2
  1167.  move.w #3,d0
  1168.  moveq #0,d4
  1169. unmix:
  1170.  move.w (a0)+,d1
  1171.  moveq #0,d2
  1172.  moveq #0,d3
  1173.  lsr.w #1,d1
  1174.  addx.w d3,d3
  1175.  lsr.w #1,d1
  1176.  addx.w d2,d2
  1177.  lsr.w #1,d1
  1178.  addx.w d3,d3
  1179.  lsr.w #1,d1
  1180.  addx.w d2,d2
  1181.  lsr.w #1,d1
  1182.  addx.w d3,d3
  1183.  lsr.w #1,d1
  1184.  addx.w d2,d2
  1185.  lsr.w #1,d1
  1186.  addx.w d3,d3
  1187.  lsr.w #1,d1
  1188.  addx.w d2,d2
  1189.  lsr.w #1,d1
  1190.  addx.w d3,d3
  1191.  lsr.w #1,d1
  1192.  addx.w d2,d2
  1193.  lsr.w #1,d1
  1194.  addx.w d3,d3
  1195.  lsr.w #1,d1
  1196.  addx.w d2,d2
  1197.  lsr.w #1,d1
  1198.  addx.w d3,d3
  1199.  lsr.w #1,d1
  1200.  addx.w d2,d2
  1201.  lsr.w #1,d1
  1202.  addx.w d3,d3
  1203.  lsr.w #1,d1
  1204.  addx.w d2,d2
  1205.  not.b d3
  1206.  move.b d3,-(a2)
  1207.  move.b d2,(a1)+
  1208.  dbra d0,unmix
  1209.  
  1210.  move.b PASSBUFFER,d0
  1211.  bsr CHECKPARITY
  1212.  tst.b d5
  1213.  bne illega
  1214.  move.b PASSBUFFER+2,d0
  1215.  bsr CHECKPARITY
  1216.  tst.b d5
  1217.  bne illega
  1218.  move.b PASSBUFFER+3,d0
  1219.  bsr CHECKPARITY
  1220.  tst.b d5
  1221.  bne illega
  1222.  move.b PASSBUFFER+4,d0
  1223.  bsr CHECKPARITY
  1224.  tst.b d5
  1225.  bne illega
  1226.  move.b PASSBUFFER+5,d0
  1227.  bsr CHECKPARITY
  1228.  tst.b d5
  1229.  bne illega
  1230.  move.b PASSBUFFER+6,d0
  1231.  bsr CHECKPARITY
  1232.  tst.b d5
  1233.  bne illega
  1234.  
  1235.  move.b PASSBUFFER+1,d0
  1236.  eor.b #%10110101,d0
  1237.  neg.b d0
  1238.  add.b #50,d0
  1239.  cmp.b PASSBUFFER+7,d0
  1240.  bne illega
  1241.  
  1242.  move.w #0,d0
  1243.  rts
  1244.  
  1245. illega:
  1246.  
  1247.  move.w #-1,d0
  1248.  
  1249.  rts
  1250.  
  1251. PASSBUFFER:
  1252.  ds.b 8
  1253.  
  1254. CHECKBUFFER: ds.b 8
  1255.  
  1256. PASS:
  1257.  ds.b 16
  1258.  
  1259. **************************************************
  1260.  
  1261. CHANGECONTROLS:
  1262.  
  1263.  move.w #6,OptScrn
  1264.  bsr DRAWOPTSCRN
  1265.  move.w #0,OPTNUM
  1266.  bsr HIGHLIGHT
  1267.  bsr WAITREL
  1268.  
  1269. .rdlop:
  1270.  bsr CHECKMENU
  1271.  tst.w d0
  1272.  blt.s .rdlop
  1273.  
  1274.  cmp.w #12,d0
  1275.  beq .backtomain
  1276.  
  1277.  move.l #KEY_LINES,a0
  1278.  move.w d0,d1
  1279.  muls #40,d1
  1280.  add.l d1,a0
  1281.  add.w #32,a0
  1282.  move.l #$20202020,(a0)
  1283.  movem.l d0/a0,-(a7)
  1284.  bsr JUSTDRAWIT
  1285.  movem.l (a7)+,d0/a0 
  1286.  
  1287.  clr.b lastpressed
  1288.  
  1289. .wtkey
  1290.  tst.b lastpressed
  1291.  beq .wtkey
  1292.  
  1293.  move.l #CONTROLBUFFER,a1
  1294.  moveq #0,d1
  1295.  move.b lastpressed,d1
  1296.  move.b d1,(a1,d0.w)
  1297.  move.l #KVALTOASC,a1
  1298.  move.l (a1,d1.w*4),(a0)
  1299.  bsr JUSTDRAWIT
  1300.  bsr WAITREL
  1301.  bra .rdlop
  1302.  
  1303. .backtomain:
  1304.  rts
  1305.  
  1306. **************************************************
  1307.  
  1308.  
  1309. MAXLEVEL: dc.w 0
  1310.  
  1311. SHOWCREDITS:
  1312.  move.w #2,OptScrn
  1313.  bsr DRAWOPTSCRN
  1314.  move.w #0,OPTNUM
  1315.  bsr HIGHLIGHT
  1316.  
  1317.  bsr WAITREL
  1318.  
  1319. .rdlop:
  1320.  bsr CHECKMENU
  1321.  tst.w d0
  1322.  blt.s .rdlop
  1323.  
  1324.  bra READMAINMENU
  1325.  
  1326. HELDDOWN:
  1327.  dc.w 0
  1328.  
  1329. WAITREL:
  1330.  
  1331.  movem.l d0/d1/d2/d3,-(a7)
  1332.  
  1333.  move.l #KeyMap,a5
  1334. WAITREL2:
  1335.  btst #7,$bfe001
  1336.  beq.s WAITREL2
  1337.  
  1338.  IFEQ CD32VER
  1339.  tst.b $40(a5)
  1340.  bne.s WAITREL2
  1341.  tst.b $44(a5)
  1342.  bne.s WAITREL2
  1343.  tst.b $4c(a5)
  1344.  bne.s WAITREL2
  1345.  tst.b $4d(a5)
  1346.  bne.s WAITREL2
  1347.  ENDC
  1348.  
  1349.  btst #1,$dff00c
  1350.  sne d0
  1351.  btst #1,$dff00d
  1352.  sne d1
  1353.  btst #0,$dff00c
  1354.  sne d2
  1355.  btst #0,$dff00d
  1356.  sne d3
  1357.  
  1358.  eor.b d0,d2
  1359.  eor.b d1,d3
  1360.  tst.b d2
  1361.  bne.s WAITREL2
  1362.  tst.b d3
  1363.  bne.s WAITREL2
  1364.  
  1365.  
  1366.  movem.l (a7)+,d0/d1/d2/d3
  1367.  rts
  1368.  
  1369. PUTINLINE:
  1370.  moveq #39,d0
  1371. pill
  1372.  move.b (a0)+,(a1)+
  1373.  dbra d0,pill
  1374.  rts
  1375.  
  1376. CHECKMENU:
  1377.  btst #1,$dff00c
  1378.  sne d0
  1379.  btst #1,$dff00d
  1380.  sne d1
  1381.  btst #0,$dff00c
  1382.  sne d2
  1383.  btst #0,$dff00d
  1384.  sne d3
  1385.  
  1386.  eor.b d0,d2
  1387.  eor.b d1,d3
  1388.  
  1389.  move.l #KeyMap,a5
  1390.  move.b $4c(a5),d0
  1391.  move.b $4d(a5),d1
  1392.  or.b d1,d3
  1393.  or.b d0,d2
  1394.  
  1395.  move.w OptScrn,d0
  1396.  move.l #MENUDATA,a0
  1397.  move.l 4(a0,d0.w*8),a0    ; opt data
  1398.  
  1399.  move.w OPTNUM,d0
  1400.  
  1401.  tst.b d2
  1402.  beq.s NOPREV
  1403.  
  1404.  
  1405.  sub.w #1,d0
  1406.  bge.s NOPREV
  1407.  
  1408.  move.w #0,d0 
  1409.  
  1410. NOPREV:
  1411.  
  1412.  tst.b d3
  1413.  beq.s NONEXT
  1414.  
  1415.  bsr WAITREL
  1416.  
  1417.  add.w #1,d0
  1418.  tst.w (a0,d0.w*8)
  1419.  bge.s NONEXT
  1420.  
  1421.  subq #1,d0
  1422.  
  1423. NONEXT:
  1424.  
  1425.  cmp.w OPTNUM,d0
  1426.  beq.s .nochange
  1427.  
  1428.  bsr HIGHLIGHT
  1429.  move.w d0,OPTNUM
  1430.  bsr HIGHLIGHT
  1431.  bsr WAITREL
  1432.  
  1433. .nochange:
  1434.  
  1435.  move.w #-1,d0
  1436.  
  1437.  btst #7,$bfe001
  1438.  beq.s select
  1439.  move.b $40(a5),d1
  1440.  or.b $44(a5),d1
  1441.  tst.b d1
  1442.  beq.s noselect
  1443.  
  1444. select:
  1445.  bsr WAITREL
  1446.  move.w OPTNUM,d0
  1447. noselect:
  1448.  
  1449.  rts
  1450.  
  1451. HIGHLIGHT:
  1452.  
  1453.  SAVEREGS
  1454.  
  1455.  move.w OptScrn,d0
  1456.  move.l #MENUDATA,a0
  1457.  move.l 4(a0,d0.w*8),a0
  1458.  move.w OPTNUM,d0
  1459.  lea (a0,d0.w*8),a0
  1460.  move.w (a0)+,d0    ;left
  1461.  move.w (a0)+,d1    ;top
  1462.  move.w (a0)+,d2    ;width
  1463.  
  1464.  muls #16*8,d1
  1465.  move.l OPTSPRADDR,a1
  1466.  add.w d1,a1
  1467.  add.w #8+16,a1
  1468.  move.l #SCRTOSPR2,a5
  1469.  adda.w d0,a5
  1470.  adda.w d0,a5
  1471.  
  1472. NOTLOP:
  1473.  
  1474.  move.w (a5)+,d3
  1475.  lea (a1,d3.w),a2
  1476.  not.b (a2)
  1477.  not.b 16(a2)
  1478.  not.b 32(a2)
  1479.  not.b 48(a2)
  1480.  not.b 64(a2)
  1481.  not.b 80(a2)
  1482.  not.b 96(a2)
  1483.  not.b 112(a2)
  1484.  not.b 128(a2)
  1485.  subq #1,d2
  1486.  bgt.s NOTLOP
  1487.  
  1488.  GETREGS
  1489.  rts
  1490.  
  1491. SCRTOSPR2:
  1492. val SET 0
  1493.  REPT 6
  1494.  dc.w val+0
  1495.  dc.w val+1
  1496.  dc.w val+2
  1497.  dc.w val+3
  1498.  dc.w val+4
  1499.  dc.w val+5
  1500.  dc.w val+6
  1501.  dc.w val+7
  1502. val SET val+258*16
  1503.  ENDR
  1504.  
  1505. CLROPTSCRN:
  1506.  
  1507.  move.l #$2cdfea,d0
  1508.  move.w (a4,d0.l),d0
  1509.  add.w d0,RVAL2
  1510.  
  1511.  move.l OPTSPRADDR,a0
  1512.  lea 16(a0),a1
  1513.  lea 16+(258*16)(a0),a2
  1514.  lea 16+(258*16*2)(a0),a3
  1515.  lea 16+(258*16*3)(a0),a4
  1516.  lea 258*16(a4),a0
  1517.  
  1518.  move.w #256,d0
  1519.  moveq #0,d1
  1520. CLRLOP:
  1521.  move.l d1,(a0)+
  1522.  move.l d1,(a0)+
  1523.  move.l d1,(a0)+
  1524.  move.l d1,(a0)+
  1525.  move.l d1,(a1)+
  1526.  move.l d1,(a1)+
  1527.  move.l d1,(a1)+
  1528.  move.l d1,(a1)+
  1529.  move.l d1,(a2)+
  1530.  move.l d1,(a2)+
  1531.  move.l d1,(a2)+
  1532.  move.l d1,(a2)+
  1533.  move.l d1,(a3)+
  1534.  move.l d1,(a3)+
  1535.  move.l d1,(a3)+
  1536.  move.l d1,(a3)+
  1537.  move.l d1,(a4)+
  1538.  move.l d1,(a4)+
  1539.  move.l d1,(a4)+
  1540.  move.l d1,(a4)+
  1541.  dbra d0,CLRLOP
  1542.  
  1543.  move.l OPTSPRADDR,a0
  1544.  move.w #44*256+64,(a0)
  1545.  move.w #44*256+2,8(a0)
  1546.  add.l #258*16,a0
  1547.  
  1548.  move.w #44*256+96,(a0)
  1549.  move.w #44*256+2,8(a0)
  1550.  add.l #258*16,a0
  1551.  
  1552.  move.w #44*256+128,(a0)
  1553.  move.w #44*256+2,8(a0)
  1554.  add.l #258*16,a0
  1555.  
  1556.  move.w #44*256+160,(a0)
  1557.  move.w #44*256+2,8(a0)
  1558.  add.l #258*16,a0
  1559.  
  1560.  move.w #44*256+192,(a0)
  1561.  move.w #44*256+2,8(a0)
  1562.  
  1563.  rts
  1564.  
  1565. DRAWOPTSCRN:
  1566.  
  1567.  bsr CLROPTSCRN
  1568.  
  1569. JUSTDRAWIT:
  1570.  
  1571.  move.l #font,a0
  1572.  move.l #MENUDATA,a1
  1573.  move.w OptScrn,d0
  1574.  move.l (a1,d0.w*8),a1
  1575.  
  1576.  move.l OPTSPRADDR,a3
  1577.  add.l #16,a3
  1578.  moveq #0,d2
  1579.  
  1580.  move.w #31,d0
  1581. linelop:
  1582.  move.w #39,d1
  1583.  move.l #SCRTOSPR,a4
  1584.  move.l a3,a2
  1585. charlop:
  1586.  move.b (a1)+,d2
  1587.  lea (a0,d2.w*8),a5
  1588.  move.b (a5)+,(a2)
  1589.  move.b (a5)+,16(a2)
  1590.  move.b (a5)+,32(a2)
  1591.  move.b (a5)+,48(a2)
  1592.  move.b (a5)+,64(a2)
  1593.  move.b (a5)+,80(a2)
  1594.  move.b (a5)+,96(a2)
  1595.  move.b (a5),112(a2)
  1596.  add.w (a4)+,a2
  1597.  dbra d1,charlop
  1598.  add.w #16*8,a3
  1599.  dbra d0,linelop
  1600.  
  1601.  rts
  1602.   
  1603. SCRTOSPR:
  1604.  dc.w 1,1,1,1,1,1,1,258*16-7
  1605.  dc.w 1,1,1,1,1,1,1,258*16-7
  1606.  dc.w 1,1,1,1,1,1,1,258*16-7
  1607.  dc.w 1,1,1,1,1,1,1,258*16-7
  1608.  dc.w 1,1,1,1,1,1,1,258*16-7
  1609.  dc.w 1,1,1,1,1,1,1,258*16-7
  1610.   
  1611. OPTNUM: dc.w 0
  1612. OptScrn: dc.w 0
  1613.  
  1614. MENUDATA:
  1615. ;0
  1616.  dc.l ONEPLAYERMENU_TXT
  1617.  dc.l ONEPLAYERMENU_OPTS
  1618. ;1
  1619.  dc.l INSTRUCTIONS_TXT
  1620.  dc.l INSTRUCTIONS_OPTS
  1621. ;2
  1622.  dc.l CREDITMENU_TXT
  1623.  dc.l CREDITMENU_OPTS
  1624. ;3
  1625.  dc.l ASKFORDISK_TXT
  1626.  dc.l ASKFORDISK_OPTS
  1627. ;4
  1628. ; dc.l ONEPLAYERMENU_TXT
  1629. ; dc.l ONEPLAYERMENU_OPTS
  1630.  dc.l MASTERPLAYERMENU_TXT
  1631.  dc.l MASTERPLAYERMENU_OPTS
  1632. ;5
  1633.  dc.l SLAVEPLAYERMENU_TXT
  1634.  dc.l SLAVEPLAYERMENU_OPTS
  1635. ;6
  1636.  dc.l CONTROL_TXT
  1637.  dc.l CONTROL_OPTS
  1638. ;7
  1639.  dc.l PROTMENU_TXT
  1640.  dc.l CONTROL_OPTS
  1641.  
  1642. ASKFORDISK_TXT:
  1643. ;      0123456789012345678901234567890123456789
  1644.  dc.b '                                        ' ;0
  1645.  dc.b '                                        ' ;1
  1646.  dc.b '                                        ' ;2
  1647.  dc.b '                                        ' ;3
  1648.  dc.b '                                        ' ;4
  1649.  dc.b '                                        ' ;5
  1650.  dc.b '                                        ' ;6
  1651.  dc.b '                                        ' ;7
  1652.  dc.b '                                        ' ;8
  1653.  dc.b '                                        ' ;9
  1654.  dc.b '                                        ' ;0
  1655.  dc.b '                                        ' ;1
  1656.  dc.b '                                        ' ;2
  1657.  dc.b '          INSERT LEVEL DISK             ' ;3
  1658.  dc.b '                                        ' ;4
  1659.  dc.b '          PRESS MOUSE BUTTON            ' ;5
  1660.  dc.b '          WHEN DISK ACTIVITY            ' ;6
  1661.  dc.b '               FINISHES                 ' ;7
  1662.  dc.b '                                        ' ;8
  1663.  dc.b '                                        ' ;9
  1664.  dc.b '                                        ' ;0
  1665.  dc.b '                                        ' ;1
  1666.  dc.b '                                        ' ;2
  1667.  dc.b '                                        ' ;3
  1668.  dc.b '                                        ' ;4
  1669.  dc.b '                                        ' ;5
  1670.  dc.b '                                        ' ;6
  1671.  dc.b '                                        ' ;7
  1672.  dc.b '                                        ' ;8
  1673.  dc.b '                                        ' ;9
  1674.  dc.b '                                        ' ;0
  1675.  dc.b '                                        ' ;1
  1676.  
  1677. ASKFORDISK_OPTS:
  1678.  dc.w -1
  1679.  
  1680.  
  1681. ONEPLAYERMENU_TXT:
  1682. ;      0123456789012345678901234567890123456789
  1683.  dc.b '                                        ' ;0
  1684.  dc.b '                                        ' ;1
  1685.  dc.b '                                        ' ;2
  1686.  dc.b '                                        ' ;3
  1687.  dc.b '                                        ' ;4
  1688.  dc.b '                                        ' ;5
  1689.  dc.b '                                        ' ;6
  1690.  dc.b '                                        ' ;7
  1691.  dc.b '                                        ' ;8
  1692.  dc.b '                                        ' ;9
  1693.  dc.b '                                        ' ;0
  1694. CURRENTLEVELLINE:
  1695.  dc.b '           LEVEL 1 : THE GATE           ' ;1 
  1696.  dc.b '                                        ' ;2
  1697.  dc.b '                1 PLAYER                ' ;3
  1698.  dc.b '                                        ' ;4
  1699.  dc.b '               PLAY  GAME               ' ;5
  1700.  dc.b '                                        ' ;6
  1701.  dc.b '            CONTROL  OPTIONS            ' ;7
  1702.  dc.b '                                        ' ;8
  1703.  dc.b '              GAME CREDITS              ' ;9
  1704.  dc.b '                                        ' ;0
  1705.  dc.b '                PASSWORD                ' ;1
  1706.  dc.b '                                        ' ;2
  1707. PASSWORDLINE:
  1708.  dc.b '                                        ' ;3
  1709.  dc.b '                                        ' ;4
  1710.  dc.b '                                        ' ;5
  1711.  dc.b '                                        ' ;6
  1712.  dc.b '                                        ' ;7
  1713.  dc.b '                                        ' ;8
  1714.  dc.b '                                        ' ;9
  1715.  dc.b '                                        ' ;0
  1716.  dc.b '                                        ' ;1
  1717.  
  1718. ONEPLAYERMENU_OPTS:
  1719.  dc.w 16,13,8,1
  1720.  dc.w 15,15,10,1
  1721.  dc.w 12,17,16,1
  1722.  dc.w 14,19,12,1
  1723.  dc.w 12,23,16,1
  1724.  dc.w -1
  1725.  
  1726.  
  1727. MASTERPLAYERMENU_TXT:
  1728. ;      0123456789012345678901234567890123456789
  1729.  dc.b '                                        ' ;0
  1730.  dc.b '                                        ' ;1
  1731.  dc.b '                                        ' ;2
  1732.  dc.b '                                        ' ;3
  1733.  dc.b '                                        ' ;4
  1734.  dc.b '                                        ' ;5
  1735.  dc.b '                                        ' ;6
  1736.  dc.b '                                        ' ;7
  1737.  dc.b '                                        ' ;8
  1738.  dc.b '                                        ' ;9
  1739.  dc.b '                                        ' ;0
  1740.  dc.b '                                        ' ;1
  1741.  dc.b '            2 PLAYER  MASTER            ' ;2
  1742.  dc.b '                                        ' ;3
  1743. CURRENTLEVELLINEM:
  1744.  dc.b '           LEVEL 1 : THE GATE           ' ;4 
  1745.  dc.b '                                        ' ;5
  1746.  dc.b '               PLAY  GAME               ' ;6
  1747.  dc.b '                                        ' ;7
  1748.  dc.b '            CONTROL  OPTIONS            ' ;8
  1749.  dc.b '                                        ' ;9
  1750.  dc.b '                                        ' ;0
  1751.  dc.b '                                        ' ;1
  1752.  dc.b '                                        ' ;2
  1753.  dc.b '                                        ' ;3
  1754.  dc.b '                                        ' ;4
  1755.  dc.b '                                        ' ;5
  1756.  dc.b '                                        ' ;6
  1757.  dc.b '                                        ' ;7
  1758.  dc.b '                                        ' ;8
  1759.  dc.b '                                        ' ;9
  1760.  dc.b '                                        ' ;0
  1761.  dc.b '                                        ' ;1
  1762.  
  1763. MASTERPLAYERMENU_OPTS:
  1764.  dc.w 12,12,16,1
  1765.  dc.w 6,14,28,1
  1766.  dc.w 15,16,10,1
  1767.  dc.w 12,18,16,1
  1768.  dc.w -1
  1769.  
  1770. SLAVEPLAYERMENU_TXT:
  1771. ;      0123456789012345678901234567890123456789
  1772.  dc.b '                                        ' ;0
  1773.  dc.b '                                        ' ;1
  1774.  dc.b '                                        ' ;2
  1775.  dc.b '                                        ' ;3
  1776.  dc.b '                                        ' ;4
  1777.  dc.b '                                        ' ;5
  1778.  dc.b '                                        ' ;6
  1779.  dc.b '                                        ' ;7
  1780.  dc.b '                                        ' ;8
  1781.  dc.b '                                        ' ;9
  1782.  dc.b '                                        ' ;9
  1783.  dc.b '                                        ' ;1
  1784.  dc.b '             2 PLAYER SLAVE             ' ;4
  1785.  dc.b '                                        ' ;3
  1786.  dc.b '               PLAY  GAME               ' ;2
  1787.  dc.b '                                        ' ;5
  1788.  dc.b '            CONTROL  OPTIONS            ' ;0
  1789.  dc.b '                                        ' ;1
  1790.  dc.b '                                        ' ;3
  1791.  dc.b '                                        ' ;7
  1792.  dc.b '                                        ' ;7
  1793.  dc.b '                                        ' ;3
  1794.  dc.b '                                        ' ;3
  1795.  dc.b '                                        ' ;3
  1796.  dc.b '                                        ' ;4
  1797.  dc.b '                                        ' ;5
  1798.  dc.b '                                        ' ;6
  1799.  dc.b '                                        ' ;7
  1800.  dc.b '                                        ' ;9
  1801.  dc.b '                                        ' ;9
  1802.  dc.b '                                        ' ;9
  1803.  dc.b '                                        ' ;9
  1804.  
  1805.  
  1806. PROTMENU_TXT:
  1807. ;      0123456789012345678901234567890123456789
  1808.  dc.b '                                        ' ;0
  1809.  dc.b '                                        ' ;1
  1810.  dc.b '                                        ' ;2
  1811.  dc.b '                                        ' ;3
  1812.  dc.b '                                        ' ;4
  1813.  dc.b '                                        ' ;5
  1814.  dc.b '                                        ' ;6
  1815.  dc.b '                                        ' ;7
  1816.  dc.b '                                        ' ;8
  1817.  dc.b '                                        ' ;9
  1818.  dc.b '                                        ' ;0
  1819.  dc.b '                                        ' ;1
  1820.  dc.b ' TYPE IN THREE DIGIT CODE FROM MANUAL : ' ;2
  1821.  dc.b '                                        ' ;3
  1822. PROTLINE:
  1823.  dc.b '        TABLE 00 ROW 00 COLUMN 00       ' ;4
  1824.  dc.b '                                        ' ;5
  1825.  dc.b '                                        ' ;6
  1826.  dc.b '                                        ' ;7
  1827.  dc.b '                                        ' ;8
  1828.  dc.b '                                        ' ;9
  1829.  dc.b '                                        ' ;0
  1830.  dc.b '                                        ' ;1
  1831.  dc.b '                                        ' ;2
  1832.  dc.b '                                        ' ;3
  1833.  dc.b '                                        ' ;4
  1834.  dc.b '                                        ' ;5
  1835.  dc.b '                                        ' ;6
  1836.  dc.b '                                        ' ;7
  1837.  dc.b '                                        ' ;9
  1838.  dc.b '                                        ' ;0
  1839.  dc.b '                                        ' ;1
  1840.  
  1841.  
  1842.  
  1843. SLAVEPLAYERMENU_OPTS:
  1844.  dc.w 12,12,16,1
  1845.  dc.w 15,14,10,1
  1846.  dc.w 12,16,16,1
  1847.  dc.w -1
  1848.  
  1849.  
  1850. PLAYER_OPTS:
  1851. ;      0123456789012345678901234567890123456789
  1852.  dc.b '                 1 PLAYER               '
  1853.  dc.b '             2  PLAYER MASTER           '
  1854.  dc.b '              2 PLAYER SLAVE            '
  1855.  
  1856. LEVEL_OPTS:
  1857. ;      0123456789012345678901234567890123456789
  1858.  dc.b '      LEVEL  1 :          THE GATE      '
  1859.  dc.b '      LEVEL  2 :       STORAGE BAY      '
  1860.  dc.b '      LEVEL  3 :     SEWER NETWORK      '
  1861.  dc.b '      LEVEL  4 :     THE COURTYARD      '
  1862.  dc.b '      LEVEL  5 :      SYSTEM PURGE      '
  1863.  dc.b '      LEVEL  6 :         THE MINES      '
  1864.  dc.b '      LEVEL  7 :       THE FURNACE      '
  1865.  dc.b '      LEVEL  8 :  TEST ARENA GAMMA      '
  1866.  dc.b '      LEVEL  9 :      SURFACE ZONE      '
  1867.  dc.b '      LEVEL 10 :     TRAINING AREA      '
  1868.  dc.b '      LEVEL 11 :       ADMIN BLOCK      '
  1869.  dc.b '      LEVEL 12 :           THE PIT      '
  1870.  dc.b '      LEVEL 13 :            STRATA      '
  1871.  dc.b '      LEVEL 14 :      REACTOR CORE      '
  1872.  dc.b '      LEVEL 15 :     COOLING TOWER      '
  1873.  dc.b '      LEVEL 16 :    COMMAND CENTRE      '
  1874.  
  1875. CONTROL_TXT:
  1876. ;      0123456789012345678901234567890123456789
  1877.  dc.b '                                        ' ;0
  1878.  dc.b '                                        ' ;1
  1879.  dc.b '                                        ' ;2
  1880.  dc.b '                                        ' ;3
  1881.  dc.b '            DEFINE  CONTROLS            ' ;4
  1882.  dc.b '                                        ' ;5
  1883. KEY_LINES:
  1884.  dc.b '     TURN LEFT                  LCK     ' ;6
  1885.  dc.b '     TURN RIGHT                 RCK     ' ;7
  1886.  dc.b '     FORWARDS                   UCK     ' ;8
  1887.  dc.b '     BACKWARDS                  DCK     ' ;9
  1888.  dc.b '     FIRE                       RAL     ' ;0
  1889.  dc.b '     OPERATE DOOR/LIFT/SWITCH   SPC     ' ;1
  1890.  dc.b '     RUN                        RSH     ' ;2
  1891.  dc.b '     FORCE SIDESTEP             RAM     ' ;3
  1892.  dc.b '     SIDESTEP LEFT               .      ' ;4
  1893.  dc.b '     SIDESTEP RIGHT              /      ' ;5
  1894.  dc.b '     DUCK                        D      ' ;6
  1895.  dc.b '     LOOK BEHIND                 L      ' ;7
  1896.  dc.b '                                        ' ;8
  1897.  dc.b '             OTHER CONTROLS             ' ;9
  1898.  dc.b '                                        ' ;0
  1899.  dc.b ' PULSE RIFLE      1  PAUSE            P ' ;1
  1900.  dc.b ' SHOTGUN          2  QUIT           ESC ' ;2
  1901.  dc.b ' PLASMA GUN       3  MOUSE CONTROL    M ' ;3
  1902.  dc.b ' GRENADE LAUNCHER 4  JOYSTICK CONTROL J ' ;4
  1903.  dc.b ' ROCKET LAUNCHER  5  KEYBOARD CONTROL K ' ;5
  1904.  dc.b '                                        ' ;6
  1905.  dc.b '               MAIN  MENU               ' ;7
  1906.  dc.b '                                        ' ;8
  1907.  dc.b '                                        ' ;9
  1908.  dc.b '                                        ' ;0
  1909.  dc.b '                                        ' ;1
  1910.  
  1911. CONTROL_OPTS:
  1912.  dc.w 5,6,30,1
  1913.  dc.w 5,7,30,1
  1914.  dc.w 5,8,30,1
  1915.  dc.w 5,9,30,1
  1916.  dc.w 5,10,30,1
  1917.  dc.w 5,11,30,1
  1918.  dc.w 5,12,30,1
  1919.  dc.w 5,13,30,1
  1920.  dc.w 5,14,30,1
  1921.  dc.w 5,15,30,1
  1922.  dc.w 5,16,30,1
  1923.  dc.w 5,17,30,1
  1924.  dc.w 15,27,10,1
  1925.  dc.w -1
  1926.  
  1927. PLOPT: dc.w 0
  1928.  
  1929. INSTRUCTIONS_TXT:
  1930. ;      0123456789012345678901234567890123456789
  1931.  dc.b 'Main controls:                          ' ;1
  1932.  dc.b '                                        ' ;2
  1933.  dc.b 'Curs Keys = Forward / Backward          ' ;3
  1934.  dc.b '            Turn left / right           ' ;4
  1935.  dc.b '          Right Alt = Fire              ' ;5
  1936.  dc.b '        Right Shift = Run               ' ;6
  1937.  dc.b '                  > = Slide Left        ' ;7
  1938.  dc.b '                  ? = Slide Right       ' ;8
  1939.  dc.b '              SPACE = Operate Door/Lift ' ;9
  1940.  dc.b '                  D = Duck              ' ;0
  1941.  dc.b '                  J = Joystick Control  ' ;1
  1942.  dc.b '                  K = Keyboard Control  ' ;2
  1943.  dc.b '                                        ' ;3
  1944.  dc.b '              1,2,3 = Select weapon     ' ;4
  1945.  dc.b '              ENTER = Toggle screen size' ;5
  1946.  dc.b '                ESC = Quit              ' ;6
  1947.  dc.b '                                        ' ;7
  1948.  dc.b '                                        ' ;8
  1949.  dc.b 'The one player game has no objective and' ;9
  1950.  dc.b 'the only way to finish is to die or quit' ;0
  1951.  dc.b '                                        ' ;1
  1952.  dc.b 'The two-player game is supposed to be a ' ;2
  1953.  dc.b 'fight to the death but will probably be ' ;3
  1954.  dc.b 'a fight-till-we-find-the-rocket-launcher' ;4
  1955.  dc.b 'then-blow-ourselves-up type game.       ' ;5
  1956.  dc.b '                                        ' ;6
  1957.  dc.b 'LOOK OUT FOR TELEPORTERS: They usually  ' ;7
  1958.  dc.b 'have glowing red walls and overhead     ' ;8
  1959.  dc.b 'lights. Useful for getting behind your  ' ;9
  1960.  dc.b ' opponent!                              ' ;0
  1961.  dc.b '  Just a taster of what is to come....  ' ;1
  1962.  dc.b '                                        ' ;0
  1963.  
  1964. INSTRUCTIONS_OPTS:
  1965.  dc.w 0,0,0,1
  1966.  dc.w -1
  1967.  
  1968. CREDITMENU_TXT:
  1969.  
  1970. ;      0123456789012345678901234567890123456789
  1971.  dc.b '    Programming, Game Code, Graphics    ' ;0
  1972.  dc.b '         Game Design and Manual         ' ;1
  1973.  dc.b '            Andrew Clitheroe            ' ;2
  1974.  dc.b '                                        ' ;3
  1975.  dc.b '             Alien Graphics             ' ;4
  1976.  dc.b '             Michael  Green             ' ;5
  1977.  dc.b '                                        ' ;6
  1978.  dc.b '           3D Object Designer           ' ;7
  1979.  dc.b '            Charles Blessing            ' ;8
  1980.  dc.b '                                        ' ;9
  1981.  dc.b '              Level Design              ' ;0
  1982.  dc.b 'Michael Green  Ben Chanter   Jackie Lang' ;1
  1983.  dc.b '     Kai Barrett Charles Blessing       ' ;2
  1984.  dc.b '                                        ' ;3
  1985.  dc.b '           Creative  Director           ' ;4
  1986.  dc.b '              Martyn Brown              ' ;5
  1987.  dc.b '                                        ' ;6
  1988.  dc.b '       Project Manager and Manual       ' ;7
  1989.  dc.b "            Martin O'Donnell            " ;8
  1990.  dc.b '                                        ' ;9
  1991.  dc.b '              Music + SFX               ' ;0
  1992.  dc.b '              Bjorn Lynne               ' ;1
  1993.  dc.b '                                        ' ;2
  1994.  dc.b '      Cover Illustration and Logo       ' ;3
  1995.  dc.b '             Kevin Jenkins              ' ;4
  1996.  dc.b '                                        ' ;5
  1997.  dc.b '      Packaging and Manual Design       ' ;6
  1998.  dc.b '               Paul Sharp               ' ;7
  1999.  dc.b '                                        ' ;8
  2000.  dc.b '             QA and Playtest            ' ;9
  2001.  dc.b '           Phil and The Wolves          ' ;0
  2002.  dc.b '                                        ' ;1
  2003.  
  2004.  dc.b '    Serial Link and 3D Object Editor:   ' ;4
  2005.  dc.b '                   by                   ' ;5
  2006.  dc.b '            Charles Blessing            ' ;6
  2007.  dc.b '                                        ' ;7
  2008.  dc.b '                Graphics:               ' ;8
  2009.  dc.b '                   by                   ' ;9
  2010.  dc.b '              Mike  Oakley              ' ;0
  2011.  dc.b '                                        ' ;1
  2012.  dc.b '             Title  Picture             ' ;2
  2013.  dc.b '                   by                   ' ;3
  2014.  dc.b '               Mike Green               ' ;4
  2015.  dc.b '                                        ' ;5
  2016.  dc.b ' Inspiration, incentive, moral support, ' ;6
  2017.  dc.b '     level design and plenty of tea     ' ;7
  2018.  dc.b '         generously supplied by         ' ;8
  2019.  dc.b '                                        ' ;9
  2020.  dc.b '              Jackie  Lang              ' ;0
  2021.  dc.b '                                        ' ;1
  2022.  dc.b '    Music for the last demo composed    ' ;2
  2023.  dc.b '       by the inexpressibly evil:       ' ;3
  2024.  dc.b '                                        ' ;8
  2025.  dc.b '            *BAD* BEN CHANTER           ' ;9
  2026.  dc.b '                                        ' ;0
  2027.  dc.b '    Sadly no room for music this time   ' ;1
  2028.  dc.b '                                        ' ;7
  2029.  dc.b '                                        ' ;7
  2030.  
  2031. CREDITMENU_OPTS:
  2032.  dc.w 0,0,1,1
  2033.  dc.w -1
  2034.  
  2035.  
  2036. ;      0123456789012345678901234567890123456789
  2037.  dc.b '                                        ' ;0
  2038.  dc.b '                                        ' ;1
  2039.  dc.b '                                        ' ;2
  2040.  dc.b '                                        ' ;3
  2041.  dc.b '                                        ' ;4
  2042.  dc.b '                                        ' ;5
  2043.  dc.b '                                        ' ;6
  2044.  dc.b '                                        ' ;7
  2045.  dc.b '                                        ' ;8
  2046.  dc.b '                                        ' ;9
  2047.  dc.b '                                        ' ;0
  2048.  dc.b '                                        ' ;1
  2049.  dc.b '                                        ' ;2
  2050.  dc.b '                                        ' ;3
  2051.  dc.b '                                        ' ;4
  2052.  dc.b '                                        ' ;5
  2053.  dc.b '                                        ' ;6
  2054.  dc.b '                                        ' ;7
  2055.  dc.b '                                        ' ;8
  2056.  dc.b '                                        ' ;9
  2057.  dc.b '                                        ' ;0
  2058.  dc.b '                                        ' ;1
  2059.  dc.b '                                        ' ;2
  2060.  dc.b '                                        ' ;3
  2061.  dc.b '                                        ' ;4
  2062.  dc.b '                                        ' ;5
  2063.  dc.b '                                        ' ;6
  2064.  dc.b '                                        ' ;7
  2065.  dc.b '                                        ' ;8
  2066.  dc.b '                                        ' ;9
  2067.  dc.b '                                        ' ;0
  2068.  dc.b '                                        ' ;1
  2069.  
  2070.  
  2071. ********************************************************
  2072.  
  2073. PUTIN32:
  2074.  move.w #31,d2
  2075. p32loop:
  2076.  moveq #0,d5
  2077.  move.l (a0)+,d3
  2078.  move.w d3,d4
  2079.  swap d3
  2080.  move.b d4,d5
  2081.  lsr.w #8,d4
  2082.  
  2083.  muls d0,d3
  2084.  muls d0,d4
  2085.  muls d0,d5
  2086.  lsr.l #8,d3
  2087.  lsr.l #8,d4
  2088.  lsr.l #8,d5
  2089.  move.w d3,d6
  2090.  swap d3
  2091.  move.w d6,d3
  2092.  move.w d4,d6
  2093.  swap d4
  2094.  move.w d6,d4
  2095.  move.w d5,d6
  2096.  swap d5
  2097.  move.w d6,d5
  2098.  and.w #%11110000,d3
  2099.  and.w #%11110000,d4
  2100.  and.w #%11110000,d5
  2101.  lsl.w #4,d3
  2102.  add.w d4,d3
  2103.  lsr.w #4,d5
  2104.  add.w d5,d3
  2105.  move.w d3,2(a1)
  2106.  swap d3
  2107.  swap d4
  2108.  swap d5
  2109.  and.w #%1111,d3
  2110.  and.w #%1111,d4
  2111.  and.w #%1111,d5
  2112.  lsl.w #8,d3
  2113.  lsl.w #4,d4
  2114.  add.w d4,d3
  2115.  add.w d5,d3
  2116.  move.w d3,2+(132*4)(a1)
  2117.  addq #4,a1
  2118.  dbra d2,p32loop
  2119.  
  2120.  
  2121.  rts
  2122.  
  2123. **************************************
  2124.  
  2125. FADEAMOUNT: dc.w 0
  2126. FADEVAL: dc.w 0
  2127.  
  2128. FADEUPTITLE:
  2129.  
  2130.  move.w FADEVAL,d0
  2131.  move.w FADEAMOUNT,d1
  2132. fadeuploop:
  2133.  
  2134.  move.l #TITLEPAL,a0
  2135.  move.l #TITLEPALCOP,a1
  2136.  
  2137. wvb:
  2138.  btst #5,$dff000+intreqrl
  2139.  beq.s wvb
  2140.  move.w #$20,$dff000+intreq 
  2141.  
  2142.  bsr PUTIN32
  2143.  add.w #4,a1
  2144.  bsr PUTIN32
  2145.  add.w #4,a1
  2146.  bsr PUTIN32
  2147.  add.w #4,a1
  2148.  bsr PUTIN32
  2149.  
  2150.  addq.w #4,d0
  2151.  dbra d1,fadeuploop
  2152.  
  2153.  subq #4,d0
  2154.  move.w d0,FADEVAL
  2155.  
  2156.  rts
  2157.  
  2158. CLEARTITLEPAL:
  2159.  PRSDP
  2160.  move.l #TITLEPALCOP,a0
  2161.  move.w #7,d1
  2162. clrpal:
  2163.  move.w #31,d0
  2164. clr32
  2165.  move.w #0,2(a0)
  2166.  addq #4,a0
  2167.  dbra d0,clr32
  2168.  addq #4,a0
  2169.  dbra d1,clrpal
  2170.  PRSDQ
  2171.  rts
  2172.  
  2173. FADEDOWNTITLE:
  2174.  
  2175.  move.w FADEVAL,d0
  2176.  move.w FADEAMOUNT,d1
  2177. fadedownloop:
  2178.  
  2179.  move.l #TITLEPAL,a0
  2180.  move.l #TITLEPALCOP,a1
  2181.  
  2182. .wvb:
  2183.  btst #5,$dff000+intreqrl
  2184.  beq.s .wvb
  2185.  move.w #$20,$dff000+intreq 
  2186.  
  2187.  bsr PUTIN32
  2188.  add.w #4,a1
  2189.  bsr PUTIN32
  2190.  add.w #4,a1
  2191.  bsr PUTIN32
  2192.  add.w #4,a1
  2193.  bsr PUTIN32
  2194.  
  2195.  subq.w #4,d0
  2196.  dbra d1,fadedownloop
  2197.  
  2198.  addq #4,d0
  2199.  move.w d0,FADEVAL
  2200.  
  2201.  rts
  2202.  
  2203. LOADTITLESCRN2:
  2204.  
  2205.  
  2206.  move.l #MEMF_CLEAR,d1
  2207.  move.l #52400,d0
  2208.  move.l 4.w,a6
  2209.  jsr    _LVOAllocMem(a6)
  2210.  tst.l  d0
  2211.  beq    .nomem
  2212.  
  2213.  move.l d0,tempptr
  2214.  
  2215.  move.l #TITLESCRNNAME2,d1
  2216.  move.l #1005,d2
  2217.  move.l doslib,a6
  2218.  jsr -30(a6)
  2219.  move.l d0,handle
  2220.  move.l d0,d1
  2221.  move.l doslib,a6
  2222. ; move.l TITLESCRNADDR,d2
  2223.  move.l tempptr,d2
  2224.  move.l #10240*7,d3
  2225.  jsr -42(a6)
  2226.  move.l doslib,a6
  2227.  move.l handle,d1
  2228.  jsr -36(a6)
  2229.  
  2230.     
  2231.  move.l TITLESCRNADDR,a0
  2232.  move.l tempptr,d0
  2233.  
  2234.  moveq #0,d1
  2235.  lea WorkSpace,a1
  2236.  lea $0,a2
  2237.  jsr unLHA
  2238.  
  2239.   move.l tempptr,a1
  2240.  move.l #52400,d0
  2241.  CALLEXEC FreeMem
  2242.   
  2243. .nomem
  2244.  
  2245.  rts
  2246.  
  2247. tempptr dc.l 0
  2248.  
  2249.  
  2250. GETTITLEMEM:
  2251.  move.l #2,d1
  2252.  move.l #10240*7,d0
  2253.  move.l 4.w,a6
  2254.  jsr -198(a6)
  2255.  move.l d0,TITLESCRNADDR
  2256.  
  2257.  move.l #$dff000-$2cdfe4,a4
  2258.  
  2259.  move.l #2,d1
  2260.  move.l #258*16*5,d0
  2261.  move.l 4.w,a6
  2262.  jsr -198(a6)
  2263.  move.l d0,OPTSPRADDR
  2264.  
  2265.  rts
  2266.  
  2267. ProtChkJLev1:
  2268.  
  2269. PROTSETUP:
  2270.  incbin "ab3:includes/protsetupenc"
  2271.  
  2272. ; Need to: Decode protection calling
  2273. ; routine
  2274. ; use null values to call it and erase
  2275. ; it from memory
  2276. ; erase this routine and return.
  2277.  
  2278. ; include "ab3:source/protsetup"
  2279.  
  2280.  
  2281. RELEASETITLEMEM:
  2282.  move.l TITLESCRNADDR,d1
  2283.  move.l d1,a1
  2284.  move.l #10240*7,d0
  2285.  move.l 4.w,a6
  2286.  jsr -210(a6)
  2287.  
  2288.  move.l OPTSPRADDR,d1
  2289.  move.l d1,a1
  2290.  move.l #258*80,d0
  2291.  move.l 4.w,a6
  2292.  jsr -210(a6)
  2293.  rts
  2294.  
  2295.  
  2296. PROTCALLENC:
  2297. ; incbin "ab3:source/protcallenc.bin
  2298.  
  2299. ; one pass, all instructions executed.
  2300. ; must call protection routine,store
  2301. ; value somewhere, call ask routine,
  2302. ; compare returned value, if correct
  2303. ; set up all values, then return.
  2304.  
  2305.  include "ab3:source/protcallenc"
  2306.  
  2307. ENDPROT:
  2308.  
  2309. LOADTITLESCRN:
  2310.  
  2311.  move.l #TITLESCRNNAME,d1
  2312.  move.l #1005,d2
  2313.  move.l doslib,a6
  2314.  jsr -30(a6)
  2315.  move.l d0,handle
  2316.  move.l d0,d1
  2317.  move.l doslib,a6
  2318.  move.l TITLESCRNADDR,d2
  2319.  move.l #10240*7,d3
  2320.  jsr -42(a6)
  2321.  move.l doslib,a6
  2322.  move.l handle,d1
  2323.  jsr -36(a6)
  2324.  
  2325.  rts
  2326.  
  2327. RVAL2: dc.w 0
  2328.  
  2329. SETUPTITLESCRN:
  2330.  
  2331.  PRSDR
  2332.  move.l #OPTCOP,a0
  2333.  move.l #rain,a1
  2334.  move.w #255,d0
  2335. putinrain:
  2336.  move.w (a1)+,d1
  2337.  move.w d1,6(a0)
  2338.  move.w d1,6+4(a0)
  2339.  move.w d1,6+8(a0)
  2340.  move.w d1,6+12(a0)
  2341.  add.w #4*14,a0
  2342.  
  2343.  dbra d0,putinrain
  2344.  
  2345. ; Put addr into copper.
  2346.  move.l OPTSPRADDR,d0
  2347.  move.w d0,tsp0l
  2348.  swap d0
  2349.  move.w d0,tsp0h
  2350.  swap d0
  2351.  add.l #258*16,d0
  2352.  move.w d0,tsp1l
  2353.  swap d0
  2354.  move.w d0,tsp1h
  2355.  swap d0
  2356.  add.l #258*16,d0
  2357.  move.w d0,tsp2l
  2358.  swap d0
  2359.  move.w d0,tsp2h
  2360.  swap d0
  2361.  add.l #258*16,d0
  2362.  move.w d0,tsp3l
  2363.  swap d0
  2364.  move.w d0,tsp3h
  2365.  swap d0
  2366.  add.l #258*16,d0
  2367.  move.w d0,tsp4l
  2368.  swap d0
  2369.  move.w d0,tsp4h
  2370.  
  2371.  move.l #nullspr,d0
  2372.  move.w d0,tsp5l
  2373.  move.w d0,tsp6l
  2374.  move.w d0,tsp7l
  2375.  swap d0
  2376.  move.w d0,tsp5h
  2377.  move.w d0,tsp6h
  2378.  move.w d0,tsp7h 
  2379.  
  2380.  move.l TITLESCRNADDR,d0
  2381.  move.w d0,ts1l
  2382.  swap d0
  2383.  move.w d0,ts1h
  2384.  swap d0
  2385.  add.l #10240,d0
  2386.  move.w d0,ts2l
  2387.  swap d0
  2388.  move.w d0,ts2h
  2389.  swap d0
  2390.  add.l #10240,d0
  2391.  move.w d0,ts3l
  2392.  swap d0
  2393.  move.w d0,ts3h
  2394.  swap d0
  2395.  add.l #10240,d0
  2396.  move.w d0,ts4l
  2397.  swap d0
  2398.  move.w d0,ts4h
  2399.  swap d0
  2400.  add.l #10240,d0
  2401.  move.w d0,ts5l
  2402.  swap d0
  2403.  move.w d0,ts5h
  2404.  swap d0
  2405.  add.l #10240,d0
  2406.  move.w d0,ts6l
  2407.  swap d0
  2408.  move.w d0,ts6h
  2409.  swap d0
  2410.  add.l #10240,d0
  2411.  move.w d0,ts7l
  2412.  swap d0
  2413.  move.w d0,ts7h
  2414.  rts 
  2415.  
  2416. RVAL1: dc.w 0
  2417.  
  2418. DummyAdds:
  2419.  dc.l dummy-78935450
  2420.  dc.l dummy-78935450
  2421.  dc.l dummy-78935450
  2422.  dc.l dummy-78935450
  2423.  dc.l dummy-78935450
  2424.  dc.l dummy-78935450
  2425.  dc.l dummy-78935450
  2426.  dc.l dummy-78935450
  2427.  dc.l dummy-78935450
  2428.  dc.l dummy-78935450
  2429.  
  2430. dummycall
  2431.  dc.w $4e75-123
  2432.  
  2433. protspace: ds.l 200
  2434.  
  2435.  include "ab3:source/LEVEL_BLURB"
  2436.  
  2437. font:
  2438.  incbin "OptFont"
  2439.  
  2440. rain: incbin "optcop"
  2441.